iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

前言

  • 今天沒意外的話會是這個系列中最後一篇經典論文探討了,雖然我們前段時間花了一些篇幅討論Autoencoder架構,但其實這篇論文的概念更像是ResNet,所以如果忘記的人可以先回顧一下ResNet的內容。

先備知識

  1. 對捲積運算有基礎的認識(可以回顧:https://ithelp.ithome.com.tw/articles/10323076 )
  2. 了解甚麼是捲積神經網路(Convolutional Neural Network)(可以回顧:https://ithelp.ithome.com.tw/articles/10323077)
  3. 知道ResNet架構長甚麼樣(可以回顧:https://ithelp.ithome.com.tw/articles/10333499https://ithelp.ithome.com.tw/articles/10333931)

看完今天的內容你可能會知道......

  • Dense connection是甚麼架構
  • DenseNet與ResNet差在哪裡
  • DenseNet有甚麼優勢

一、更強更猛的ResNet?

  • 論文https://arxiv.org/pdf/1608.06993.pdf
  • 我們在介紹ResNet時有提過,通過短路連接(Shortcut connection),可以讓更多的資訊往後傳遞,有助於利用最佳化方式進行反向傳遞,可以建立出更深層的模型。2017年被提出了DenseNet這篇論文也是類似的想法,不過他的連接方式比起ResNet來的更加暴力直接。為甚麼這麼說呢?我們試想一下,如果只有前後層之間使用短路連接的效果還不錯的話,那麼我能不能多連接幾層?這樣是不是就可以讓更多層的資訊往後傳遞,也可以促進資訊的融合?
  • 是的沒錯!DenseNet就是使用這樣的結構(如下圖所示):
    https://ithelp.ithome.com.tw/upload/images/20231009/20163299BeOlmCx5Tv.png
  • 圖中的紅色、綠色、紫色、黃色與橘色代表的是不同捲積層輸出的特徵圖,可以看到,這些特徵圖都被直接往後拉,跟別的特徵圖結合,這就是DenseNet提出的「密集連接(Dense connection)」,如果只有前後層之間的連接的話,就是ResNet中的Residual Block架構,DenseNet連接了更多更密集的層(會連接除了自己以外前面所有的層),所以才會是Dense connection。
  • 另一點和ResNet的不同之處在於融合特徵圖資訊的方式。在Residual Block中,我們是如何結合自己的特徵圖與拉過來的特徵圖呢?答案是直接加在一起,所以會要求Residual跟Shortcut的輸出結果需要圖片大小與通道數都要一致。可是DenseNet不是用加的,是直接把特徵「疊」在一起,所以只需要圖片大小相同即可,經過結合之後通道數量會增加,換句話說就是可以有更多的特徵資訊可以用。
  • 這正是DenseNet的一大特點,如果我好不容易提取出來的特徵只使用一層的話,會不會太浪費了?在CNN架構中,每一層的捲積層都會提取出不同的特徵,傳統上這些特徵只會被當層下一層捲積層的輸入資料來處理,可是,從另外一個角度思考,如果今天要完成一個分類任務的話,我應該盡可能的考慮所有的特徵,讓模型自己去學誰比較重要,而不是在傳遞的過程當中逐步萃取資訊,這樣我可以有更多的資訊協助判斷。DenseNet這樣的結構就是讓每一層都可以接受到之前學到的所有特徵,這被稱為「Feature reuse」,也就是我們重新使用之前的特徵。
  • 註記:這邊說的疊其實用專業的話來說是指concat這個運算(可以參考:https://pytorch.org/docs/stable/generated/torch.cat.html)

二、DesneNet架構

  • 聊完了核心概念,接著讓我們來看看DenseNet的整體架構吧!
    https://ithelp.ithome.com.tw/upload/images/20231009/20163299Collr1ILtt.png
  • 整體模型結構可以分成兩個部分:「Dense Block」與「Transition Layer」,前者正是我們剛剛花了一些時間討論的結構,後者的話目的是在「調整特徵圖大小」,在CNN中,我們會逐步將特徵圖的面積縮小,讓捲積核可以提取到不同尺度的特徵,可是,如果圖片大小不同的話,就沒辦法把不同層輸出的特徵圖「疊」在一起了,所以我們需要使用Transition Layer來處理這件事。簡單來說,在Dense Block中的每一個捲積層都會接受之前所有特徵圖的資訊,而這些資訊會由Dense Block中的最後一個捲積層負責整合並往下傳遞,而DesneNet Block彼此之間因為特徵圖大小不同,所以在往下傳遞之前須經由Transition Layer調整。
  • 說了這麼多,如果還記得ResNet的人應該可以感覺到,DenseNet透過更密集更緊湊的方式,讓它在參數量與計算量更少的情況下,依然能有優異的表現,這也是DenseNet最突出的地方。

三、總結

  • 今天我們介紹了2017年提出的DenseNet架構,算是替之前LeNet-5, AlexNet, VGG到ResNet這條路畫上一個句點,讓大家看一下如果根據ResNet的想法往下發展會變成甚麼樣子,當然,CNN還有其他許多的架構與變形,礙於時間因素沒能在這個系列中詳細討論,之後有機會可以陸陸續續慢慢更新上來。

上一篇
CNN經典論文實戰(四)--Autoencoder
下一篇
CNN經典論文實戰(五)--DenseNet
系列文
AI白話文運動系列之「A!給我那張Image!」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言